package com.kapcb.schedule.annotation;

import com.kapcb.schedule.bean.ExecutorRouteStrategyEnum;
import com.kapcb.schedule.bean.ScheduleTypeEnum;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * <a>Title: AutoXxlJob </a>
 * <a>Author: kapcb <a>
 * <a>Description: AutoXxlJob <a>
 * 在创建任务时，必填字段除了执行器和jobHandler之外，还有任务描述、负责人、Cron表达式、调度类型、运行模式。在这里，我们默认调度类型为CRON、运行模式为BEAN，另外的3个字段的信息需要用户指定
 *
 * @author Kpacb
 * @version 1.0
 * @date 2024/5/29 21:55
 * @since 1.0
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoXxlJob {

    /**
     * 任务执行器的名称
     */
    String value();

    /**
     * 任务执行器初始化方法
     */
    String init() default "";

    /**
     * 任务执行器销毁方法
     */
    String destroy() default "";

    /**
     * 任务执行器的 cron 表达式
     */
    String cron();

    /**
     * 任务执行器的描述
     */
    String jobDesc() default "default jobDesc";

    /**
     * 任务执行器的负责人
     */
    String author() default "default Author";

    /**
     * 任务执行器的状态，0-停止，1-运行
     */
    int triggerStatus() default 0;

    /**
     * 任务执行器的报警邮箱
     */
    String alarmEmail() default "";

    /**
     * 任务执行器类型
     */
    ScheduleTypeEnum scheduleType() default ScheduleTypeEnum.CRON;

    /**
     * 执行方式
     */
    ExecutorRouteStrategyEnum executorRouteStrategy() default ExecutorRouteStrategyEnum.RANDOM;

}
